package com.googlecode.simpleqms

class DivisionService {
    static transactional = true

    def getList() {
        return Division.list().collect {
            [
                    id: "Div_${it.id}",
                    text: it.name,
					iconCls: 'div_icon'
            ]
        }
    }

    def getElement(params) {
        def division = Division.get(params.get('divisionId').trim())
        return [
                id: division.id,
                type: 'division',
                name: division.name,
                description: division.description,
                company: division.company.name
        ]
    }

    def addElement(params) {
        def company = Company.get(params.get("companyId").trim())
        def newDivision = new Division()

        for (Division div : Division.list()) {
            if (div.name.trim().equalsIgnoreCase(params.get('name-inputEl').trim()))
                return ['success': false, 'message': 'Такое подразделение уже существует']
        }
        if (params.get('description-inputEl').trim().length() > 255)
            return ['success': false, 'message': 'Длина описания не может превышать 255 символов']

        newDivision.name = params.get('name-inputEl').trim()
        newDivision.description = params.get('description-inputEl').trim()
        newDivision.company = company

        if (newDivision.save())
            return ['success': true, 'message': "Подразделение <b>${newDivision.name}</b> добавлено"]
        return ['success': false, 'message': 'Не удалось добавить новое подразделение']
    }

    def modElement(params) {
        def modDivision = Division.get(params.get("divisionId").trim())
        def final divisionOldName = modDivision.name
        for (Division div : Division.list()) {
            if (div.id == modDivision.id) {
                if (div.name.trim().equals(params.get('name-inputEl').trim()) &&
                        div.description.trim().equals(params.get('description-inputEl').trim()))
                    return ['success': false, 'message': 'Ничего не изменилось']
            } else if (div.name.trim().equalsIgnoreCase(params.get('name-inputEl').trim()))
                return ['success': false, 'message': 'Такое подразделение уже существует']
        }
        if (params.get('description-inputEl').trim().length() > 255)
            return ['success': false, 'message': 'Длина описания не может превышать 255 символов']

        modDivision.name = params.get('name-inputEl').trim()
        modDivision.description = params.get('description-inputEl').trim()

        if (modDivision.save()) {
            def message = "Подразделение <b>${divisionOldName}</b> изменено. Новое имя - <b>${modDivision.name}</b>"
            if (modDivision.name.equalsIgnoreCase(divisionOldName))
                message = "Подразделение <b>${modDivision.name}</b> изменено"
            return ['success': true, 'message': message]
        }
        return ['success': false, 'message': "Не удалось изменить подразделение <b>${divisionOldName}</b>"]
    }

    def delElement(params) {
        def delDivision = Division.get(params.get("divisionId").trim())
        def final delDivisionName = delDivision.name
        def divisionProjects = Project.findAllByDivision(delDivision)
        divisionProjects.each() { project ->
            def divisionEmployees = Employee.findAllByProject(project)
            divisionEmployees.each() { employee ->
                employee.delete()
            }
            project.delete()
        }
        if (delDivision.delete())
            return ['success': true, 'message': "Подразделение <b>${delDivisionName}</b> удалено"]
        return ['success': false, 'message': "Не удалось удалить подразделение <b>${delDivisionName}</b>"]
    }
}